package com.free.ext.web.spring.formatters;



import com.free.exception.SystemException;
import com.free.utils.DateUtils;
import com.free.utils.constants.RegexConstants;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;

import java.util.Date;
import java.util.regex.Pattern;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
public class StringToDateConverter implements Converter<String,Date> {

    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/
    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/
    @Override
    public Date convert(String s) {
        if(StringUtils.isEmpty(s)){
            return null;
        }
        DateUtils.FormatEnum formate = getFormatEnum(s);
        if(formate != null){
            try {
                return DateUtils.convert2Date(s, formate);
            } catch (SystemException e) {
                return null;
            }
        }
        return null;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
    private DateUtils.FormatEnum getFormatEnum(String s){
        int length = s.length();
        if(length == 10){
            if(s.indexOf("-")>=0){
                return DateUtils.FormatEnum.yyyy_MM_dd;
            }else{
                return DateUtils.FormatEnum.yyyyspMMspdd;
            }
        }
        else if(length == 8){
            return DateUtils.FormatEnum.yyyyMMdd;
        }
        else if(length == 14){
            return DateUtils.FormatEnum.yyyyMMddHHmmss;
        }
        else if(length == 19){
            if(s.indexOf("-")>=0){
                return DateUtils.FormatEnum.yyyy_MM_dd_HH_mm_ss;
            }else{
                return DateUtils.FormatEnum.yyyyspMMspdd_HH_mm_ss;
            }
        }
        else if(length == 16){
        	 if(s.indexOf("-")>=0){
                 return DateUtils.FormatEnum.yyyy_MM_dd_HH_mm;
             }
        }
        return null;
    }

    public static void main(String[] args) {
        StringToDateConverter con = new StringToDateConverter();
        Date date1 = con.convert("20180901");
        Date date6 = con.convert("20180901120101");
        Date date2 = con.convert("2018-09-01");
        Date date3 = con.convert("2018/09/01");
        Date date4 = con.convert("2018-09-01 12:09:09");
        Date date5 = con.convert("2018/09/01 12:09:09");
        Date date8 = con.convert("2018/09/01 12:09");
        System.out.println("ok");

    }
}
